package tat;

import tat.domain.DomainModelRelation;
import tat.domain.Requirement;
import tat.domain.TatActor;
import tat.domain.TatClass;
import tat.domain.UseCaseRelation;
import tat.exception.ObjectAlreadyExistsException;

public interface TatApp extends UseCaseControl {

	void resetApplication();

    void createClassRelation(String originName,
                             String destinationName,
                             String originMultiplicity,
                             String destinationMultiplicity,
                             boolean navigable,
                             String associationType, boolean createRequirement);

    DomainModelRelation[] conferDomainModelRelations();

    void removeDomainModelRelation(String relationName);

    void createUCActorRelation(String actorName, String ucName);

    void removeUCActorRelation(String relationName);

    void createRequirement(String relationType, String relationName);

    void createRequirement(String text, int position);

    void createUcRequirement(String text);

    void createDomRequirement(String relation);

    void createRelationRequirement(String valor);

    void editRequirement(String requirementText, String newValue);

    void editClass(String classText, String newValue);

    void removeRequirement(String requirementName);
    void removeUseCase(String name);
    void editUseCase(String oldUCName, String newUCName);

    void createActor(String actorName);

    void removeActor(String actorName);
    void editActor(String oldActorName, String newActorName);

    TatActor[] conferActors();

    Requirement[] conferRequirements();

    String showModelAsText();

    String showModelAsXML();

	void createClass(String name) throws ObjectAlreadyExistsException;

	TatClass[] conferClasses();

	void removeClass(String name);

	UseCaseRelation[] conferUCActorRelations();

	String showRequirementsReport();

	void createAttribute(String cla, String name) throws ObjectAlreadyExistsException;

	void editAttribute(String cla, String oldAttribute, String newAttributeName);

	void removeAttribute(String cla, String name);

}
